// 封装请求万户域名的请求（非声学部）

import Taro from "@tarojs/taro";
import { getGlobalData } from "../globalData";
const baseUrl = getGlobalData("url");
const whBaseUrl = getGlobalData("whUrl");

function toLogin() {
  // 清空缓存
  Taro.removeStorageSync("token");
  // 显示弹窗
  Taro.reLaunch({
    url: "/pages/index/index?showLogin=1",
  });
}
// 定义一个错误处理函数，根据不同的状态码进行不同的处理
function errorHandle(status, other) {
  // 根据状态码进行不同的处理
  switch (status) {
    case 1:
    case 401:
    case 403:
      Taro.showModal({
        title: "提示",
        content: "登录已过期，请重新登录",
        success: () => {
          toLogin();
        },
      });
      break;
    // 如果状态码为404，则弹出提示框，提示用户请求的资源不存在，并跳转到全部服务页
    case 404:
      // Taro.showToast({ title: '请求的资源不存在', icon: 'none' });
      // 请求资源不存在，跳到全部服务页
      Taro.showModal({
        title: "提示",
        content: "请求的资源不存在，请前往全部服务页",
        success: (res) => {
          if (res.confirm) {
            Taro.reLaunch({
              url: "/pages/index/index",
            });
          }
        },
      });
      break;
    // 如果状态码为500，则弹出提示框，提示用户服务器出错，请稍后再试
    case 500:
      // Taro.clearStorageSync()
      Taro.showToast({ title: "服务器出错，请稍后再试", icon: "none" });

      break;
    // 如果状态码为501，则弹出提示框，提示用户已被重定向
    case 501:
      Taro.showToast({ title: "已被重定向", icon: "error" });
      break;
    // 默认情况，不做任何处理
    default:
      break;
  }
}

export function request(reqObj) {
  // console.log("reqObj", reqObj);
  let token = Taro.getStorageSync("token");
  let authHeader = {
    token: `${token}`,
  };
  let header = {};
  if (!reqObj.noAuth) {
    header = Object.assign({}, authHeader, reqObj.header);
  }

  let url = reqObj.url;
  if (!/https?:\/\//.test(url)) {
    url = baseUrl + url;
  }
  let method = reqObj.method || "GET";
  Taro.request({
    url,
    data: reqObj.data,
    header,
    method: method,
    success: function (res) {
      // console.log("res:", res);
      if (res.data.respCode === 1) {
        reqObj.success && reqObj.success(res.data.respData, res.data);
      } else if (res.data.respCode === 401 || res.data.respCode === 403) {
        console.log('res', res)
        console.log('reqObj', reqObj)
        Taro.showModal({
          title: "提示",
          content: '登录已过期，请重新登录',
          complete: () => {
            toLogin();
          },
        });
      } else if (reqObj.fail) {
        console.log('res2', res)
        reqObj.fail(res.data.respCode, res.data.respMsg, res.data);
      } else {
        console.log('res3', res)
        setTimeout(() => {
          Taro.showToast({
            title: res.data.respMsg || "请求报错",
            icon: "none",
            duration: 3000,
          });
        }, 1000);
      }
      // errorHandle(res.data.respCode)
    },
    fail: function (err: any) {
      // console.log("fail err2:", err);
      if (reqObj.fail) {
        reqObj.fail(-1, err.message || err.msg || JSON.stringify(err));
      }
    },
    complete: function () {
      if (reqObj.complete) {
        reqObj.complete();
      }
    },
  });
}
// 老万户接口请求
export function whRequest(reqObj) {
  let whToken = Taro.getStorageSync('whToken')
  let authHeader = {
    Authorization: `Bearer ${whToken}`
  }
  let header = {};
  if (!reqObj.noAuth) {
    header = Object.assign({}, authHeader, reqObj.header);
  }

  let url = reqObj.url;
  if (!/https?:\/\//.test(url)) {
    url = whBaseUrl + url;
  }
  if(reqObj.params){
    let queryLetter = url.includes('?') ? '&' : '?'
    url += queryLetter + Object.keys(reqObj.params).map(key => key + '=' + reqObj.params[key]).join('&')
  }
  let method = reqObj.method || "GET";
  Taro.request({
    url,
    data: reqObj.data,
    header,
    method: method,
    success: function (res) {
      if (res.data.code === 0) {
        if (reqObj.success) {
          reqObj.success(res.data.data);
        }
      } else {
        // console.log("error:", url, res);
        Taro.hideLoading();

        if (reqObj.fail) {
          reqObj.fail(res.data.code, res.data.msg, res.data);
        } else {
          setTimeout(() => {
            Taro.showToast({
              title: res.data.msg,
              icon: "none",
              duration: 3000,
            });
          }, 1000);
        }
        // errorHandle(res.data.respCode)
      }
    },
    fail: function (err: any) {
      console.log("fail err2:", err);
      if (reqObj.fail) {
        reqObj.fail(-1, err.message || err.msg || JSON.stringify(err));
      }
    },
    complete: function () {
      if (reqObj.complete) {
        reqObj.complete();
      }
    },
  });
}
